package model;

import ar.edu.unq.tpi.pconc.Channel;


/**
 * @author martin
 *
 */

public class Camino extends ZonaBatalla{

	/**
	 * 
	 * Los canales que sean utilizados de 1-99 
	 * serán vinculados a los distintos caminos
	 * 
	 * Los canales que sean utilizados de 100-999 serán ciudades
	 * 
	 * Los canales que sean utilizados de 1000-9999 serán unidades
	 * 
	 */
	
	public static final int SolicitudDePasoACamino = 1;
	
	private Ciudad origen;
	private Ciudad destino;
	
	private Channel<String> permisoDePasoACamino = new Channel<String>(SolicitudDePasoACamino);

	public Ciudad getOrigen() {
		return origen;
	}

	public void setOrigen(Ciudad origen) {
		this.origen = origen;
	}

	public Ciudad getDestino() {
		return destino;
	}

	public void setDestino(Ciudad destino) {
		this.destino = destino;
	}
	
	public void setUnidadActual(Unidad unidadActual) {
		this.unidadActual = unidadActual;
		
		/*
		 * 
		 * Setea la unidad e inmediantamente 
		 * libera un nuevo permiso para que pueda ser utilizado
		 * 
		 */
		
		this.permisoDePasoACamino.send("");
	}
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

	@Override
	public void asignarAGanadorDeBatalla(Unidad unidad) {
		
	}
	
	public void ingresarAlCamino(Unidad ingresante){
		/*
		 * Bloqueo con un canal para evitar problemas concurrentes
		 * Luego de ingresar la nuevo unidad libera un nuevo permiso para ser consumido
		 * */
		permisoDePasoACamino.receive();
		this.ingresar(ingresante);
		this.permisoDePasoACamino.send("");
	}
	
	/*
	 * Metodo que ejecuta las funcionalidad del thread
	 * 
	 * */
	
	public void run(){
		/*
		 * Inicia el thread liberando un permiso hasta 
		 * que este sea consumido
		 * 
		 */
		this.permisoDePasoACamino.send("");
		
	}

}
